package com.zzf.concurrent.example.design.pattern.observer.oop.example;

import java.util.LinkedList;
import java.util.List;

/**
 * 主题，观察者订阅主题，主题数据/状态更新后，主动通知观察者。
 *
 * @author GaoFeng2017
 * @date 2019/8/31 15:46
 */
public class Subject {

    /** 状态 */
    private String status;

    /** 观察者列表 */
    private List<Observer> observers = new LinkedList<>();

    public void addObserver(Observer observer) {
        this.observers.add(observer);
    }

    public void removeObserver(Observer observer) {
        this.observers.remove(observer);
    }

    public void updateStatus(String status) {
        this.status = status;
        observers.forEach(observer -> {
            observer.update(status);
        });
    }

    public String getStatus() {
        return status;
    }
}
